package karolina;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Biblioteka {

    private static int liczbaKsiazek = 0;

    public static int getLiczbaKsiazek() {
        return liczbaKsiazek;
    }

    public static void setLiczbaKsiazek(int liczbaKsiazek) {
        Biblioteka.liczbaKsiazek = liczbaKsiazek;
    }

    public List<Ksiazka> getListaKsiazek() {
        return listaKsiazek;
    }

    public void setListaKsiazek(List<Ksiazka> listaKsiazek) {
        this.listaKsiazek = listaKsiazek;
    }
    private List<Ksiazka> listaKsiazek = new ArrayList();
    private List<Czasopismo> listaCzasopism = new ArrayList();

    public Biblioteka() throws FileNotFoundException, IOException {

        FileReader czytajPlik = new FileReader("ksiazki.txt");
        BufferedReader bufferedReader = new BufferedReader(czytajPlik);

        String tetuKsiazkiZpliku = bufferedReader.readLine();
        do {
            liczbaKsiazek++;
            listaKsiazek.add(new Ksiazka(tetuKsiazkiZpliku));
            tetuKsiazkiZpliku = bufferedReader.readLine();
        } while (tetuKsiazkiZpliku != null);

        bufferedReader.close();
        FileReader czytajCzasopisma = new FileReader("czasopisma.txt");
        BufferedReader buf = new BufferedReader(czytajCzasopisma);

        String tetuCzasopismaZpliku = buf.readLine();
        do {
            listaCzasopism.add(new Czasopismo(tetuCzasopismaZpliku));
            tetuCzasopismaZpliku = buf.readLine();
        } while (tetuCzasopismaZpliku != null);

        bufferedReader.close();
    }

    public void wypiszKsiazkiDostepne() {
        System.out.println("Dostepne ksiazki:");
        for (Ksiazka s : listaKsiazek) {
            if (s.getOsoba() != null) {
                System.out.println(s.getTytul() + " ------------ " + s.getOsoba().getImie());
            } else {
                System.out.println(s.getTytul() + "  ------------ NIKT NIE WYPOŻYCZYŁ");
            }

        }
        System.out.println();
    }
    
        public void wypiszCzasopismaDostepne() {
        System.out.println("Dostepne czasopisma:");
        for (Czasopismo c : listaCzasopism) {
            if (c.getOsoba() != null) {
                System.out.println(c.getTytul() + " ------------ " + c.getOsoba().getImie());
            } else {
                System.out.println(c.getTytul() + "  ------------ NIKT NIE WYPOŻYCZYŁ");
            }

        }
        System.out.println();
    }

    private void wypozyczKsiazke (Ksiazka ksiazka, Osoba osoba) {

        for (int i = 0; i < liczbaKsiazek; i++) {
            if (listaKsiazek.get(i).equals(ksiazka)) {
                if (listaKsiazek.get(i).getOsoba() != null) {
                    System.out.println("Książka o tytule: \"" + ksiazka.getTytul() + "\" jest wypożyczona przez " + listaKsiazek.get(i).getOsoba().getImie() + " " + listaKsiazek.get(i).getOsoba().getNazwisko());
                    return;
                }
                listaKsiazek.get(i).setOsoba(osoba);
                System.out.println("Wypożyczono książkę \"" + ksiazka.getTytul() + "\" osobie: " + osoba.getImie() + " " + osoba.getNazwisko());
                osoba.getKsiazkiWypozyczonePrzez().add(listaKsiazek.get(i));
                return;
            }
        }
        System.out.println("Nie ma w bazie ksiażki o tytule: \"" + ksiazka + "\"");

    }
    
    private void wypozyczCzasopismo (Czasopismo czasopismo, Osoba osoba) {

        for (int i = 0; i < listaCzasopism.size(); i++) {
            if (listaCzasopism.get(i).equals(czasopismo)) {
                if (listaCzasopism.get(i).getOsoba() != null) {
                    System.out.println("Czasopismo o tytule: \"" + czasopismo.getTytul() + "\" jest wypożyczona przez " + listaCzasopism.get(i).getOsoba().getImie() + " " + listaKsiazek.get(i).getOsoba().getNazwisko());
                    return;
                }
                listaCzasopism.get(i).setOsoba(osoba);
                System.out.println("Wypożyczono czasopismo \"" + czasopismo.getTytul() + "\" osobie: " + osoba.getImie() + " " + osoba.getNazwisko());
                osoba.getCzasopismaWypozyczonePrzez().add(listaCzasopism.get(i));
                return;
            }
        }
        System.out.println("Nie ma w bazie czasopisma o tytule: \"" + czasopismo + "\"");

    }

    public void oddajKsiazke(String tytul, Osoba osoba) {
        Ksiazka ksiazka = getKsiazka(tytul);
        for (int i = 0; i < osoba.getKsiazkiWypozyczonePrzez().size(); i++) {
            if (osoba.getKsiazkiWypozyczonePrzez().get(i).equals(ksiazka)) {
                System.out.println(osoba.getImie() + " " + osoba.getNazwisko() + " oddała książkę: \"" + ksiazka.getTytul() + "\"");
                for (int j = 0; j < liczbaKsiazek; j++) {
                    if (listaKsiazek.get(j).equals(ksiazka)) {
                        listaKsiazek.get(j).setOsoba(null);
                    }
                }
                return;
            }
            System.out.println("Tej książki nie wypożyczyłeś u  nas!!!");
        }

    }
        public void oddajCzasopismo(String tytul, Osoba osoba) {
        Czasopismo czasopismo = getCzasopismo(tytul);
        for (int i = 0; i < osoba.getCzasopismaWypozyczonePrzez().size(); i++) {
            if (osoba.getKsiazkiWypozyczonePrzez().get(i).equals(czasopismo)) {
                System.out.println(osoba.getImie() + " " + osoba.getNazwisko() + " oddała czasopismo: \"" + czasopismo.getTytul() + "\"");
                for (int j = 0; j < listaCzasopism.size(); j++) {
                    if (listaCzasopism.get(j).equals(czasopismo)) {
                        listaCzasopism.get(j).setOsoba(null);
                    }
                }
                return;
            }
            System.out.println("Tego czasopisma nie wypożyczyłeś u  nas!!!");
        }

    }

    public void ksiazkaPoszukiwanaPrzez(String tytul, Osoba osoba) {
        Ksiazka ksiazkaTmp = getKsiazka(tytul);

        if (ksiazkaTmp != null) {
            wypozyczKsiazke(ksiazkaTmp, osoba);
        } else {
            System.out.println("Książki nie ma w naszej bibliotece.");
        }
    }
    
        public void czasopismoPoszukiwanaPrzez(String tytul, Osoba osoba) {
        Czasopismo czasopismoTmp = getCzasopismo(tytul);

        if (czasopismoTmp != null) {
            wypozyczCzasopismo(czasopismoTmp, osoba);
        } else {
            System.out.println("Czasopisma nie ma w naszej bibliotece.");
        }
    }

    private Ksiazka getKsiazka(String tytul) {
        for (Ksiazka ksiazka : listaKsiazek) {
            if (ksiazka.getTytul().equals(tytul)) {
                return ksiazka;
            }
        }
        return null;
    }
        private Czasopismo getCzasopismo(String tytul) {
        for (Czasopismo czasopismo : listaCzasopism) {
            if (czasopismo.getTytul().equals(tytul)) {
                return czasopismo;
            }
        }
        return null;
    }

}
